﻿using System.Windows.Forms;
using EntitiesAndMappings.Entities;
using ProyectoSelva.Daos;
using ProyectoSelva.Dtos;
using ProyectoSelva.Util;
using ProyectoSelva.Validate;

namespace ProyectoSelva.Forms.Consultas
{
    public partial class FrmConsultaSeguimiento : Form, IValidateForm
    {
        private bool _IsValid;

        public static FrmConsultaSeguimiento Activo { set; get; }

        public FrmConsultaSeguimiento()
        {
            InitializeComponent();
            _IsValid = true;
            if (Activo == null)
            {
                Activo = this;
            }
            dGridResultado.AutoGenerateColumns = false;
        }

        private void btnBuscar_Click(object sender, System.EventArgs e)
        {
            ActionExecutor.Execute(this, delegate
            {
                var contratoDao = new ContratoDAO();
                var listado = contratoDao.Buscar(new ConsultaContratoDTO
                {
                    Apellidos = txtApellidos.Text.Trim(),
                    Nombres = txtNombres.Text.Trim(),
                    Empresa = cmbEmpresa.SelectedItem as Empresa,
                    Proyecto = cmbProyecto.SelectedItem as Proyecto,
                    Lote = cmbLote.SelectedItem as Lote,
                    FiltraTerminoContrato = checkFechaTermino.Checked,
                    FechaTerminoContratoDesde = datFechaTerminoDesde.Value.Date,
                    FechaTerminoContratoHasta = datFechaTerminoHasta.Value.Date,
                    FiltraIngresoCampo = checkFechaIngresoCampo.Checked,
                    FechaIngresoCampoDesde = datFechaIngresoCampoDesde.Value.Date,
                    FechaIngresoCampoHasta = datFechaIngresoCampoHasta.Value.Date,
                    FiltraSalidaCampo = checkFechaSalidaCampo.Checked,
                    FechaSalidaCampoDesde = datFechaSalidaCampoDesde.Value.Date,
                    FechaSalidaCampoHasta = datFechaSalidaCampoHasta.Value.Date
                });
                dGridResultado.DataSource = ContratoDTO.AListaDTO(listado);
            });
        }
        
        private void checkFechaIngresoCampo_CheckedChanged(object sender, System.EventArgs e)
        {
            datFechaIngresoCampoDesde.Enabled = !datFechaIngresoCampoDesde.Enabled;
            datFechaIngresoCampoHasta.Enabled = !datFechaIngresoCampoHasta.Enabled;
        }

        private void checkFechaTermino_CheckedChanged(object sender, System.EventArgs e)
        {
            datFechaTerminoDesde.Enabled = !datFechaTerminoDesde.Enabled;
            datFechaTerminoHasta.Enabled = !datFechaTerminoHasta.Enabled;
        }

        private void checkFechaSalidaCampo_CheckedChanged(object sender, System.EventArgs e)
        {
            datFechaSalidaCampoDesde.Enabled = !datFechaSalidaCampoDesde.Enabled;
            datFechaSalidaCampoHasta.Enabled = !datFechaSalidaCampoHasta.Enabled;
        }

        private void FrmConsultaContratos_Load(object sender, System.EventArgs e)
        {
            ActionExecutor.Execute(this, delegate
            {
                var empresaDao = new EntidadGenericaDAO<Empresa>();
                var proyectoDao = new EntidadGenericaDAO<Proyecto>();
                var loteDao = new EntidadGenericaDAO<Lote>();
                cmbEmpresa.DataSource = FormUtils.AddFirst(empresaDao.ListarActivos(), new Empresa { Codigo = "", Descripcion = "Todos" });
                cmbProyecto.DataSource = FormUtils.AddFirst(proyectoDao.ListarActivos(), new Proyecto { Codigo = "", Descripcion = "Todos" });
                cmbLote.DataSource = FormUtils.AddFirst(loteDao.ListarActivos(), new Lote { Codigo = "", Descripcion = "Todos" });
            });
        }

        private void FrmConsultaContratos_FormClosing(object sender, FormClosingEventArgs e)
        {
            Activo = null;
        }

        public void Invalid()
        {
            _IsValid = false;
        }

        public bool IsValid()
        {
            return _IsValid;
        }

        private void tStripButtonExportarAExcel_Click(object sender, System.EventArgs e)
        {
            if (dGridResultado.Rows.Count > 0)
            {
                ActionExecutor.Execute(this, delegate
                {
                    ExcelUtils.ExportarGridAExcel(dGridResultado);
                });
            }
        }

    }
}
